zoukankan      html  css  js  c++  java
  • golang中type常用用法

    golang中,type是非常重要的关键字,一般常见用法就是定义结构,接口等,但是type还有很多其它的用法,在学习中遇到了以下几种,这点简单总结记录下

    • 定义结构
    type Person struct {
        name string
        age int
    }
    
    type Mutex struct {}
    type OtherMutex Mutex //定义新的类型
    
    func (m *Mutex) Lock(){
    	fmt.Println("lock")
    }
    func (m *Mutex) Unlock(){
    	fmt.Println("lock")
    }
    
    func main() {
    	m := &OtherMutex{} //注意,OtherMutex不具有Lock和Unlock方法
    	m.Lock()
    }
    
    • 定义接口
    type Personer interface{
        ShowName(s string)
    }
    
    • 类型定义
    type Myint int  //定义一个新的类型,
    
    //定义一个类型方法
    func (m Myint) showValue() {
    	fmt.Println("show int", m)
    }
    
    func main() {
        var m Myint = 9 //变量声明
        m.showValue()
    }
    
    新定义的类型,可以定义方法,
    如上例的 showValue()
    
    • 别名定义

    定义和原来一样的类型,就是一个别名alias

    type nameMap = map[string]interface{}
    
    func main() {
       m :=make(nameMap)
       m["name"] = "golang"
       fmt.Printf("%v", m)
    }
    
    另外别名定义和类型定义有点区别
     
    type A int32   //类型定义,生成新的
    type B = int32 //别名定义,仅仅是 alias
    
    func main() {
    	var a A = 333
    	fmt.Println(a)
    	var b B = 333
            b = B(a) //a,b属于不同的类型,所以这里需要强制转换
    	fmt.Println(b)
    
    }
    
    • 定义函数类型
    type cb func(s string)  // 定义一个函数类型
    
    //对函数类型再定义方法
    func (f cb) ServerCb() error{
    	f("cbb")
    	fmt.Println("server cb")
    	return nil
    }
    
    func main() {
    	s :=cb(func( s string){
    		fmt.Println("sss", s)
    	})
    	s.ServerCb()
    }
    

    其实,这种定义方式,和实现接口的方法定义差不多,感觉这种就是让代码更清晰,如果声明太复杂,不用看上去全是很乱的这种定义。

    好了,以上就是 type一些常用的用法。

  • 相关阅读:
    欧几里得学习笔记
    卢卡斯定理学习笔记
    环相关问题
    BSGS学习笔记
    淘宝首页自动切换选项卡变换内容
    彻底弄懂CSS盒子模式(DIV布局快速入门)
    runoo' blog WEB2.0
    彻底弄懂CSS盒子模式
    CSS 样式切换
    js强贴收藏
  • 原文地址:https://www.cnblogs.com/smartrui/p/11425822.html
Copyright © 2011-2022 走看看