golang的一些试验小程序

golang的一些试验小程序,第1张

概述golang的Map程序: package mainimport "fmt"type e interface{}func mult2(t e) e { switch t.(type) { case int: return t.(int) * 2 case string: return t.(string) + t.(string) } return t}fun

golang的Map程序:

package mainimport "fmt"type e interface{}func mult2(t e) e {	switch t.(type) {	case int:		return t.(int) * 2	case string:		return t.(string) + t.(string)	}	return t}func add3(t e) e {	switch t.(type) {	case int:		return t.(int) + t.(int) + t.(int)	case string:		return t.(string) + t.(string) + t.(string)	}	return t}func localmap(s []e,f func(e) e) {	s2 := make([]e,len(s))	for k,v := range s {		s2[k] = f(v)	}	fmt.Println(s2)}func main() {	slice1 := []e{1,2,3,4,"a","hello"}	slice2 := []e{"a","b","c"}	localmap(slice1,mult2)	localmap(slice2,mult2)	localmap(slice1,add3)	localmap(slice2,add3)}

运行结果:

[2 4 6 8 aa hellohello][aa bb cc][3 6 9 12 aaa hellohellohello][aaa bbb ccc]

要分清数组指针类型 *[n]T和指针数组类型 [n]*T。用new创建数组,返回的是数组指针:

package mainimport "fmt"func test(a *[10]int) {	a[2] = 100}func main() {	var a = new([10]int)	test(a)	fmt.Println(a,len(a))}

golang的OOP示例:

package mainimport "fmt"type User struct {	ID   int	name string}type Manager struct {	User	Group string}type Tester interface {	test()}func (this *User) test() {	fmt.Println(this)}func (this *Manager) test() {	fmt.Println(this)}func dosometing(o Tester) {	o.test()}func main() {	m := Manager{User: User{2,"jack"},Group: "IT"}	dosometing(&m)	dosometing(&m.User)}

拥有超集的接口可以被转换为子集的接口:

package mainimport "fmt"type User struct {	ID   int	name string}type Manager struct {	Group string	User}type IUser interface {	test()}type IManager interface {	test()	Test2()}func (this *User) test() {	fmt.Println(this)}func (this *Manager) Test2() {	fmt.Println(this)}func main() {	var im IManager = &Manager{"IT",User{1,"tom"}}	im.test()	im.Test2()	var iu IUser = im	iu.test()}

对于channel,首先要明确“发送(send)”与“接收(receive)”的概念:“发送是指”值传递给channel;“接收”是指从channel读取值。可以定义仅能发送或仅能接收的单向channel。比如c1 chan<-int,仅能发送int类型的值给c1;c2 <-chan int,c2仅能接收int类型的值。示例如下:

package mainimport (	"fmt")func recv(i <-chan int,o chan<- bool) {	for v := range i {		fmt.Println(v)	}	o <- true}func send(i chan<- int) {	for j := 0; j < 10; j++ {		i <- j	}	close(i)}func main() {	i := make(chan int)	o := make(chan bool)	go recv(i,o)	go send(i)	<-o}

使用channel实现信号量:

package mainimport (	"fmt"	"sync"	"time")var sem = make(chan int,2)var wg = sync.WaitGroup{}func worker(i int) {	sem <- 1	fmt.Println(time.Now().Format("04:05"),i)	time.Sleep(1 * time.Second)	<-sem	wg.Done()}func main() {	for i := 0; i < 10; i++ {		wg.Add(1)		go worker(i)	}	wg.Wait()}
总结

以上是内存溢出为你收集整理的golang的一些试验小程序全部内容,希望文章能够帮你解决golang的一些试验小程序所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1292281.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存