以php的方式认识go


package main

// 为fmt定义别名
import mm "fmt"

// 定义一个对象 (有a和b成员)
type Mutatable struct {
    a int
    b int
}

// 为对象Mutatable添加一个StayTheSame方法
func (m Mutatable) StayTheSame() {
    m.a = 5
    m.b = 7
}

// 为对象Mutatable添加一个Mutate方法,且引用原来的对象(使用*号引用)在此函数内修改函数成员会作用到调用者身上
func (m *Mutatable) Mutate() {
    m.a = 5
    m.b = 7
}

// 程序运行入口(在init函数运行后执行)
func main() {
    // 实例化一个Mutatable对象(&用处未知)?
    m := &Mutatable{0, 0}

    // 另一种实例化对象方式(和上一种的区别)?
    // m := new(Mutatable)

    // 打印m对象
    mm.Println(m)

    // 调用StayTheSame方法
    m.StayTheSame()
    mm.Println(m)
    m.Mutate()
    mm.Println(m)
}

// 初始化函数(在此使用Println打印时数字正常.字符串报错[定义变量,直接打印都会])?
func init()  {
    mm.Println(1235464)
}

又遇到了三个问题谁能解释一下?

go
讨论数量: 2

我来说说我的理解:

  • 实例化一个Mutatable对象(&用处未知)?另一种实例化对象方式(和上一种的区别)?
//在go语言中,实例化对象有3种方法
a := &Mutatable{0, 0} //返回的是一个指针(类似PHP的引用类型)
b := Mutatable{} //返回的是一个实例类型
c := new(Mutatable) // //返回的也是一个指针(类似PHP的引用类型)
  • 初始化函数(在此使用Println打印时数字正常.字符串报错[定义变量,直接打印都会])? 字符串打印请使用双引号
func init()  {
    mm.Println(1235464)
    mm.Println("字符串")
}

//输出
/private/var/folders/mx/394_smx921db1dsqyg8h1msh0000gn/T/___go_build_main_go #gosetup
1235464
字符串
3年前 评论
月亮☪ (楼主) 3年前

go是全新的语言 是c语言和java语言的进阶版 和精简版. 用php的思想来思考,就是牛头不对马嘴。

3年前 评论
月亮☪ (楼主) 3年前
snowlyg 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!